#游戏主体
import pygame
import random
from game_items import *
from game_hub import *
from game_music import *


class Game(object):
    #初始化窗口
    def __init__(self):
        #游戏主窗口
        self.main_window = pygame.display.set_mode(SCREEN_RECT.size) #导入game.item中的屏幕尺寸
        pygame.display.set_caption("飞机大战")

        #游戏状态属性
        self.is_game_over = False    #游戏结束标记
        self.is_pause = False   #游戏暂停标记

        #精灵组属性
        self.all_group = pygame.sprite.Group()      #所有精灵组
        self.enemies_group = pygame.sprite.Group()  #敌机精灵组
        self.supplies_group = pygame.sprite.Group() #道具精灵组

        # 创建两个背景精灵对象，并添加到精灵组中,背景精灵，交替滚动
        self.all_group.add(Background(False), Background(True))

        #创建精灵
        #背景精灵，向下方移动 1代表移动的速度
        GameSprite('background.png',1,self.all_group)
        #英雄精灵，静止不动 0表示不动
        hero = GameSprite('me1.png',0,self.all_group)
        # 显示在屏幕中央，英雄精灵矩形的中心和背景图片的中心相等，即实现在屏幕中心
        hero.rect.center = SCREEN_RECT.center

        # 指示器面板
        self.hub_panel = HubPanel(self.all_group)

    #重新开始游戏
    def reset_game(self):
        self.is_game_over = False   #游戏结束标记
        self.is_pause = False   #游戏暂停标记
    #游戏结束事件监听
    def event_handler(self):
        for event in pygame.event.get():
            #监听事件是否为quit类型
            if event.type == pygame.QUIT:
                return True
            #监听事件类型是否为键盘被按下，且key值是否为esc键
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                return True
            #监听事件类型是否为键盘被按下。且key值为空格
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                if self.is_game_over:                    #游戏已经结束
                    self.reset_game()                   #重新开始游戏
                else:
                    self.is_pause = not self.is_pause   #切换暂停状态
            # 判断是否正在游戏
            if not self.is_game_over and not self.is_pause:
                # 监听玩家按下"b"键，引爆1颗炸弹
                if event.type == pygame.KEYDOWN and event.key == pygame.K_b:
                    # TODO 测试炸弹数量变化
                    self.hub_panel.show_bomb(random.randint(0, 100))
        #没有监听到则返回False值，继续游戏
        return False
    #游戏开始
    def start(self):
        clock = pygame.time.Clock()     #设置游戏时钟
        while True:
            if self.event_handler():    #监听游戏是否结束
                return
            #判断游戏状态
            if self.is_game_over:
                print("游戏已经结束，按空格键重新开始。。。")
            elif self.is_pause:
                print("游戏已经暂停，按空格键继续。。。")
            else:
                #更新 all_group中所有精灵内容
                self.all_group.update()
            #绘制 all_group中的所有精灵
            self.all_group.draw(self.main_window)
            pygame.display.update()     #游戏更新
            clock.tick(60)              #游戏刷新频率


# 三个对象决定游戏的开始，暂停，结束，重置
# is_game is_game_over is_pause
if __name__ == "__main__":
    pygame.init()
    Game().start()
    pygame.quit()